/**
 * 整体思路是遍历字符串，过程中将每行都看成新的字符串构成字符串数组
 * 最后再将该数组拼接起来即可
 * 如果numRows=1，则说明当前字符串即为结果，直接返回
 * 否则整个字符串需要遍历，向下向右，反复循环
 * 设定down表示是否向下，loc变量表示当前字符串数组的下标
 * 如果down为true，则loc +=1，字符串数组下标向后移动，将当前字符加入当前字符串中
 * 如果down为false，则表示向右，则 loc-=1，字符串数组下标向前移动，将当前字符加入当前字符串中
 * 时间复杂度为O(n)，n为字符串s的长度
 */
var convert = function (s, numRows) {
  if (numRows === 1) return s

  const len = Math.min(s.length, numRows)
  // rows是每一行的字符串数组，初始化
  const rows = []
  for (let i = 0; i < len; i++) {
    rows[i] = ""
  }
  let loc = 0
  let down = false
  // 对s进行遍历
  for (const c of s) {
    // 一开始肯定是加,rows[0]
    rows[loc] += c
    // 如果是0的话，接下来是往下走，如果是最后一行的话，接下来肯定是往上走
    // 往下走的话就是loc+1,往上就是loc-1
    if (loc == 0 || loc == numRows - 1) down = !down
    loc += down ? 1 : -1
  }
  return rows.join("")
}
